import torch
import numpy as np
from scipy import stats

class CorrelationMetrics:
    """计算SROCC和LCC的评估指标类"""
    
    @staticmethod
    def compute(predictions, targets):
        """
        计算预测值和目标值之间的SROCC和LCC
        
        参数:
            predictions: 预测分数张量
            targets: 真实分数张量
            
        返回:
            srocc: 斯皮尔曼等级相关系数
            lcc: 皮尔逊线性相关系数
        """
        # 转换为numpy数组
        pred_np = predictions.detach().cpu().numpy().flatten()
        target_np = targets.detach().cpu().numpy().flatten()
        
        # 计算相关系数
        srocc = stats.spearmanr(pred_np, target_np)[0]
        lcc = stats.pearsonr(pred_np, target_np)[0]
        
        return srocc, lcc